home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 December / CMCD1203.ISO / Software / Complet / CINEBENCH 2003 / plugins / Bench.cof
Text File  |  2003-02-27  |  20KB  |  860 lines

  1. // CINEBENCH 2003 script, (C) MAXON Computer GmbH 2003
  2.  
  3. // set this variable to '1' if you want to run CINEBENCH in batch mode
  4. var AUTORUN = 0;
  5.  
  6. var version   = "V2.06";
  7. var PLUGIN_ID = 900323;
  8.  
  9. var c4d_shad_cb   = 0.0;    // sum for 3D Bench
  10. var ogl_soft_cb   = 0.0;    // sum for 3D Bench
  11. var ogl_hard_cb   = 0.0;    // sum for 3D Bench
  12. var render_1_cb   = 0.0;    // sum for RenderBench single
  13. var render_x_cb   = 0.0;    // sum for RenderBench MP
  14. var render_1_time = 0.0;
  15. var render_x_time = 0.0;
  16.  
  17. var dialog;
  18. var autoruntime = 0;
  19. var autostarted = 0;
  20.  
  21. var SHADING_FAC = 50;
  22.  
  23. var R_PANELVIEW = 59000;
  24.  
  25. // ************************ Renderbereich **********************
  26. PrepareRender(name)
  27. {
  28.     var d,start;
  29.  
  30.     LoadDocument(name);
  31.     d = GetActiveDocument();
  32.  
  33.     if (!d)
  34.     {
  35.         var text;
  36.     text = stradd("Error!\n",name->GetLastString(),"\nnot found");
  37.  
  38.         TextDialog(text);
  39.         return FALSE;
  40.     }
  41.  
  42.     var rd = d->GetFirstRenderData();
  43.     var bc = rd->GetContainer();
  44.  
  45.     //println("...prerendering");
  46.  
  47.     var xm = bc->GetData(RDATA_XRES);
  48.     var ym = bc->GetData(RDATA_YRES);
  49.     var shadow = bc->GetData(RDATA_SHADOW);
  50.  
  51.     bc->SetData(RDATA_XRES,20);
  52.     bc->SetData(RDATA_YRES,10);
  53.     bc->SetData(RDATA_SHADOW,0);
  54.     rd->SetContainer(bc);
  55.  
  56.     var nap = new(BaseBitmap,20,10);
  57.     d->Render(nap,FALSE);
  58.  
  59.     bc->SetData(RDATA_XRES,xm);
  60.     bc->SetData(RDATA_YRES,ym);
  61.     bc->SetData(RDATA_SHADOW,shadow);
  62.     rd->SetContainer(bc);
  63.  
  64.     return TRUE;
  65. }
  66.  
  67. DoRender(mp)
  68. {
  69.     var start;
  70.     var d  = GetActiveDocument();
  71.     var rd = d->GetFirstRenderData();
  72.     var bc = rd->GetContainer();
  73.  
  74.     bc->SetData(RDATA_SUPPRESSMP,mp);
  75.     rd->SetContainer(bc);
  76.  
  77.     var map = new(BaseBitmap,bc->GetData(RDATA_XRES),bc->GetData(RDATA_YRES));
  78.  
  79.     //println("...rendering scene");
  80.  
  81.     start = time();
  82.     d->Render(map,TRUE);
  83.  
  84.     return start;
  85. }
  86.  
  87. // ***********************  3D Bereich **********************
  88. ClearAll(doc)
  89. {
  90.     while (doc->GetFirstObject())
  91.     {
  92.         doc->GetFirstObject()->Remove();
  93.     }
  94.  
  95.     while (doc->GetFirstMaterial())
  96.     {
  97.         doc->GetFirstMaterial()->Remove();
  98.     }
  99. }
  100.  
  101.  
  102. MakeObject_1(doc,sub)
  103. {
  104.     // first delete all existing objects
  105.     ClearAll(doc);
  106.  
  107.     var op = new(FractalObject);
  108.     doc->InsertObject(op,NULL,NULL);
  109.  
  110.     var bc = op->GetContainer();
  111.     bc->SetData(PRIM_FRACTAL_LEN,vector(500.0,200.0,500.0));
  112.     bc->SetData(PRIM_FRACTAL_SUBW,sub);
  113.     bc->SetData(PRIM_FRACTAL_SUBH,sub);
  114.     op->SetContainer(bc);
  115.  
  116.     var tp = new(PhongTag);
  117. /*    var bc = tp->GetContainer();
  118.     bc->SetData(PHONGTAG_PHONG,1.5);
  119.     tp->SetContainer(bc);
  120. */    op->InsertTag(tp,NULL);
  121.  
  122.     return op;
  123. }
  124.  
  125. ShadeIt_1(sub,teststring)
  126. {
  127.     var t,j,i,t1,t2;
  128.     //var op = MakeObject_1(doc,sub);
  129.  
  130.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("shading"); file->AddLast("city3.c4d");
  131.  
  132.     LoadDocument(file);
  133.     var doc = GetActiveDocument();
  134.     if (!doc) return 0.0;
  135.     var fn = new(Filename);
  136.     fn->SetFullString(teststring + ": CityGen");
  137.     doc->SetFilename(fn);
  138.  
  139.     var op = doc->GetFirstObject();
  140.  
  141.     if (sub>1)
  142.     {
  143.         var data = new(BaseContainer,0);
  144.         data->SetData(MDATA_SUBDIVIDE_HYPER,FALSE);
  145.         data->SetData(MDATA_SUBDIVIDE_ANGLE,0.0);
  146.         data->SetData(MDATA_SUBDIVIDE_SPLINESUB,0);
  147.         data->SetData(MDATA_SUBDIVIDE_SUB,sub-1);
  148.  
  149.         SendModelingCommand(MCOMMAND_SUBDIVIDE,doc,op,data,MODIFY_POLYGONSELECTION);
  150.     }
  151.     var polys = op->GetPolygonCount();
  152.  
  153.     // primitiv caches aufbauen!!!
  154.     DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  155.  
  156.     var t = new(BaseTime);
  157.     var f1 = doc->GetMinTime()->GetFrame(doc->GetFps());
  158.     var f2 = doc->GetMaxTime()->GetFrame(doc->GetFps());
  159.  
  160.     var j,i,t1 = time();
  161.     for (j=0;j<SHADING_FAC;j++)
  162.     {
  163.         for(i=f1; i<f2; i++)
  164.         {
  165.             t->SetFrame(i,doc->GetFps());
  166.             doc->SetTime(t);
  167.             DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  168.         }
  169.         if (time()-t1>8000) { j++; break; }
  170.     }
  171.     var tt = (time()-t1)/j/1000.0;
  172.  
  173.     var polypersec = polys*(f2-f1)/tt;
  174.     var fps = (f2-f1)/tt;
  175.  
  176.     println(tostring(tt,"0.2f")," sec; ",tostring(fps,".1f")," fps ");
  177.     println(tostring(polypersec,".0f")," polygons/sec");
  178.  
  179.     KillDocument(doc);
  180.  
  181.     return tt;
  182. }
  183.  
  184. ShadeIt_2(name,cycles,teststring)
  185. {
  186.     var doc,f1,f2,t1,t2,t,i,j;
  187.  
  188.     LoadDocument(name);
  189.     doc = GetActiveDocument();
  190.     var fn = new(Filename);
  191.     fn->SetFullString(teststring + ": Pump Action");
  192.     doc->SetFilename(fn);
  193.  
  194.     // primitiv caches aufbauen!!!
  195.     DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  196.  
  197.     t = new(BaseTime);
  198.     f1 = doc->GetMinTime()->GetFrame(doc->GetFps());
  199.     f2 = doc->GetMaxTime()->GetFrame(doc->GetFps());
  200.  
  201.     t1 = time();
  202.     for (j=0;j<cycles;j++)
  203.     {
  204.         for(i=f1; i<f2; i++)
  205.         {
  206.             t->SetFrame(i,doc->GetFps());
  207.             doc->SetTime(t);
  208.             DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  209.         }
  210.  
  211.         if (time()-t1>8000) { j++; break; }
  212.         j++;
  213.  
  214.         for(i=f2; i>=f1; i--)
  215.         {
  216.             t->SetFrame(i,doc->GetFps());
  217.             doc->SetTime(t);
  218.             doc->AnimateDocument(0);
  219.  
  220.             DrawViews(DA_NO_THREAD | DA_NO_REDUCTION | DA_FORCEFULLREDRAW | DA_NODUALPLANE | DA_ONLY_ACTIVE_VIEW);
  221.         }
  222.         if (time()-t1>8000) { j++; break; }
  223.     }
  224.     t2 = time();
  225.     var t = ((t2-t1)/j/1000.0);
  226.     var fps = (f2-f1)/t;
  227.     println(tostring(t,"0.2f")," sec; ",tostring(fps,".1f")," fps");
  228.  
  229.     Sleep(400);
  230.  
  231.     KillDocument(doc);
  232.  
  233.     return (t2-t1)/j/1000.0;
  234. }
  235.  
  236. DoShade(teststring)
  237. {
  238.     var x1,x2,x3,x4,x5,x6,t1,t2,t3,t4,t5,t6;
  239.     var e1=0.0,e2=0.0,e3=0.0,e4=0.0;
  240.  
  241. gc();
  242.  
  243.     var doc=GetActiveDocument();
  244.  
  245.     KillDocument(doc);
  246.  
  247.     SetMousePointer(MOUSE_HIDE);
  248.  
  249.     x1 = 1;
  250.     x2 = 2;
  251.     x3 = 3;
  252.  
  253.     println("Scene 1:");
  254.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("flythrough"); file->AddLast("flythrough.c4d");
  255.     t2 = ShadeIt_2(file,SHADING_FAC,teststring);
  256.     if (t2!=0.0) e2 = 12502.0/t2;
  257.  
  258.     println("Scene 2:");
  259.     t1 = ShadeIt_1(x1,teststring);
  260.  
  261.     if (t1!=0.0) e1 = 3732.4/t1;
  262.  
  263.     SetMousePointer(MOUSE_SHOW);
  264.  
  265.     return (e1+e2)/2.0;
  266. }
  267.  
  268. // ************************ make a dialog class  ********************************************
  269.  
  270. enum
  271. {
  272.     B_COMPLETE  = 4000,
  273.     B_RENDER,
  274.     B_RENDER_M,
  275.     B_CINEMA,
  276.     B_OPENGL_SW,
  277.     B_OPENGL_HW,
  278.     B_CLIP1,
  279.     B_CLIP2,
  280.  
  281.     R_RENDER,
  282.     R_RENDER_M,
  283.     R_CINEMA,
  284.     R_OPENGL_SOFT,
  285.     R_OPENGL_HARD,
  286.  
  287.     R_GAIN_MP,
  288.     R_GAIN_OGLHW_OGLSW,
  289.  
  290.     R_RM1,
  291.     R_RM2,
  292.  
  293.     B_INFO_NAME,
  294.     B_INFO_MACH,
  295.     B_INFO_MHZ,
  296.     B_INFO_OS,
  297.     B_INFO_GFX,
  298.  
  299.     B_ABOUT0,
  300.     B_ABOUT1,
  301.     B_ABOUT2,
  302.     B_ABOUT3,
  303.     B_ABOUT4
  304. }
  305.  
  306. class MyDialog : GeDialog
  307. {
  308.     private:
  309.         var start,rendermode,multi;
  310.  
  311.     public:
  312.         MyDialog();
  313.  
  314.         CreateLayout();
  315.         Command(id,msg);
  316.         UpdateDialog();
  317.         Init();
  318.         CoreMessage(id,msg);
  319.         Timer(msg);
  320.  
  321.         BringToFront(managerid);
  322.  
  323.         AllTestsDone();
  324.  
  325.         Test1();
  326.         Test2();
  327.         Test_C4D_Shading();
  328.         Test_OGL_SW();
  329.         Test_OGL_HW();
  330.  
  331.         OptEnable();
  332.         StartAllTests();
  333. }
  334.  
  335. MyDialog::MyDialog()
  336. {
  337.     super(PLUGIN_ID);
  338.     rendermode = -1;
  339.     multi = FALSE;
  340. }
  341.  
  342. MyDialog::BringToFront(managerid)
  343. {
  344.     var msg = new(BaseContainer,'show');
  345.     msg->SetData('id',managerid);
  346.     SendCoreMessage(0xC0FFEE,msg,0);
  347. }
  348.  
  349. MyDialog::AllTestsDone()
  350. {
  351.     if (!AUTORUN) return;
  352.  
  353.     var t;
  354.     var le;
  355.  
  356.     le = GeGetLineEnd();
  357.  
  358.     t =  "CINEBENCH 2003 "+le;
  359.     t += "Rendering (Single   CPU)           : "; if (render_1_cb!=0.0) t += tostring(render_1_cb,".0f"); else t += "---"; t += " CB-CPU"; if (render_1_time!=0.0) t += ", "+tostring(render_1_time,".1f")+" sec"; t += le;
  360.     t += "Rendering (Multiple CPU)           : "; if (render_x_cb!=0.0) t += tostring(render_x_cb,".0f"); else t += "---"; t += " CB-CPU"; if (render_x_time!=0.0) t += ", "+tostring(render_x_time,".1f")+" sec"; t += le;
  361.     t += "Shading (CINEMA 4D)                : "; if (c4d_shad_cb!=0.0) t += tostring(c4d_shad_cb,".0f"); else t += "---"; t += " CB-GFX"+le;
  362.     t += "Shading (OpenGL Software Lighting) : "; if (ogl_soft_cb!=0.0) t += tostring(ogl_soft_cb,".0f"); else t += "---"; t += " CB-GFX"+le;
  363.     t += "Shading (OpenGL Hardware Lighting) : "; if (ogl_hard_cb!=0.0) t += tostring(ogl_hard_cb,".0f"); else t += "---"; t += " CB-GFX"+le;
  364.     t += le;
  365.  
  366.     SetClipboardData(t);
  367.  
  368.     println("AUTORUN complete\n");
  369.  
  370.     Sleep(2);
  371.  
  372.     shutdown();
  373. }
  374.  
  375. MyDialog::CoreMessage(id,msg)
  376. {
  377.     if (id==-1003 && rendermode!=100)
  378.     {
  379.         var diff = msg->GetData(BFM_CORE_PAR2);
  380.         if (diff==-1)
  381.         {
  382.             println("Rendering aborted\n");
  383.         }
  384.         else
  385.         {
  386.             if (rendermode==0)
  387.             {
  388.                 render_1_time = diff/1000.0;
  389.                 if (diff!=0.0) render_1_cb = 1.0 / render_1_time * 26320.0;
  390.                 if (!(GetCPUCount()>1 && multi))
  391.                 {
  392.                     BringToFront(PLUGIN_ID);
  393.                     AllTestsDone();
  394.                 }
  395.                 println(tostring(render_1_time,".1f")," sec");
  396.             }
  397.             else if (rendermode==1)
  398.             {
  399.                 render_x_time = diff/1000.0;
  400.                 if (diff!=0.0) render_x_cb = 1.0 / render_x_time * 26320.0;
  401.                 multi=FALSE;
  402.                 BringToFront(PLUGIN_ID);
  403.                 println(tostring(render_x_time,".1f")," sec");
  404.                 AllTestsDone();
  405.             }
  406.         }
  407.         var d = GetActiveDocument();
  408.         KillDocument(d);
  409.  
  410.         rendermode = -1;
  411.         Init();
  412.         println(" ");
  413.     }
  414. }
  415.  
  416.  
  417. MyDialog::CreateLayout()
  418. {
  419.     SetTitle("CINEBENCH 2003");
  420.     SetTimer(1000);
  421.  
  422.     if (AUTORUN)
  423.     {
  424.         autoruntime = time();
  425.         println("CINEBENCH 2003 AUTORUN\nplease wait until all tests are done!\n");
  426.     }
  427.  
  428.     AddGroupBeginV(1000,BFH_FIT,1,"",0);
  429.         AddGroupBorderSpace(4,4,4,4);
  430.  
  431.         AddGroupSpace(8,8);
  432.  
  433.         AddGroupBeginV(1000,BFH_FIT,2,"Info",0);
  434.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  435.             AddGroupBorderSpace(4,4,4,4);
  436.             AddGroupSpace(2,1);
  437.  
  438.             AddStaticText(1000,BFH_LEFT,0,0,"Machine",0);
  439.             AddEditText(B_INFO_MACH,BFH_SCALEFIT,0,11);
  440.  
  441.             AddStaticText(1000,BFH_LEFT,0,0,"MHz (real freq.)",0);
  442.             AddEditText(B_INFO_MHZ,BFH_SCALEFIT,0,11);
  443.  
  444.             AddStaticText(1000,BFH_LEFT,0,0,"OS",0);
  445.             AddEditText(B_INFO_OS,BFH_SCALEFIT,0,11);
  446.  
  447.             AddStaticText(1000,BFH_LEFT,0,0,"GFX-Board",0);
  448.             AddEditText(B_INFO_GFX,BFH_SCALEFIT,0,11);
  449.  
  450.             AddStaticText(1000,BFH_LEFT,0,0,"Tester",0);
  451.             AddEditText(B_INFO_NAME,BFH_SCALEFIT,0,11);
  452.  
  453.         AddGroupEnd();
  454.  
  455.         AddGroupBeginV(1000,BFH_FIT,1,"Main",0);
  456.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  457.             AddGroupBorderSpace(4,4,4,4);
  458.  
  459.             AddButton(B_COMPLETE,BFH_FIT,0,0,"Start all tests");
  460.             AddButton(B_CLIP1,BFH_FIT,0,0,"-> To Clipboard");
  461.             AddButton(B_CLIP2,BFH_FIT,0,0,"-> To Database");
  462.         AddGroupEnd();
  463.  
  464.         AddGroupBeginV(1000,BFH_FIT,2,"CPU Benchmark",0);
  465.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  466.             AddGroupBorderSpace(4,4,4,4);
  467.  
  468.             AddButton(B_RENDER,BFH_FIT,0,0,"Rendering (1 CPU)");
  469.             AddStaticText(R_RENDER,BFH_LEFT,100,0,"---",0);
  470.  
  471.             AddButton(B_RENDER_M,BFH_FIT,0,0,"Rendering (x CPU)");
  472.             AddStaticText(R_RENDER_M,BFH_LEFT,100,0,"---",0);
  473.  
  474.             AddStaticText(R_RM2,BFH_LEFT,0,0,"Multiprocessor Speedup:",0);
  475.             AddStaticText(R_GAIN_MP ,BFH_LEFT,60,0,"---",0);
  476.     //        AddButton(B_ABOUT4,BFH_LEFT,0,0,"Readme");
  477.         AddGroupEnd();
  478.  
  479.         AddGroupBeginV(1000,BFH_SCALEFIT,2,"Graphics Benchmark",0);
  480.             AddGroupBorder(BORDER_GROUP_IN|BORDER_WITH_TITLE);
  481.             AddGroupBorderSpace(4,4,4,4);
  482.  
  483.             AddButton(B_CINEMA,BFH_FIT,0,0,"C4D Shading");
  484.             AddStaticText(R_CINEMA,BFH_SCALEFIT,100,0,"-o-",0);
  485.     //        AddStaticText(1000,BFH_LEFT,20,0,"",0);
  486.     //        AddStaticText(1000,BFH_LEFT,20,0,"",0);
  487.     //        AddButton(B_ABOUT1,BFH_LEFT,0,0,"Readme");
  488.  
  489.             AddButton(B_OPENGL_SW,BFH_FIT,0,0,"OpenGL SW-L");
  490.             AddStaticText(R_OPENGL_SOFT,BFH_SCALEFIT,100,0,"---",0);
  491.  
  492.             AddButton(B_OPENGL_HW,BFH_FIT,0,0,"OpenGL HW-L");
  493.             AddStaticText(R_OPENGL_HARD,BFH_SCALEFIT,100,0,"---",0);
  494.  
  495.             AddStaticText(1000,BFH_LEFT,0,0,"OpenGL Speedup:",0);
  496.             AddStaticText(R_GAIN_OGLHW_OGLSW,BFH_SCALEFIT,60,0,"---",0);
  497.         AddGroupEnd();
  498.  
  499.         AddGroupBeginV(1000,BFH_CENTER,1,"",0);
  500.             AddGroupBorderSpace(4,4,4,4);
  501.             AddStaticText(1000,BFH_CENTER,0,0,"CINEBENCH 2003 is based",0);
  502.             AddStaticText(1000,BFH_CENTER,0,0,"on the high performance",0);
  503.             AddStaticText(1000,BFH_CENTER,0,0,"3D software CINEMA 4D.",0);
  504.             AddStaticText(1000,BFH_CENTER,0,0,"More info at www.maxon.net",0);
  505.         AddGroupEnd();
  506.     AddGroupEnd();
  507.  
  508.     return TRUE;
  509. }
  510.  
  511. MyDialog::Test1()
  512. {
  513.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("daylight"); file->AddLast("daylight.c4d");
  514.  
  515.     println("Single CPU Render Test");
  516.  
  517.     rendermode = 100;
  518.     Init();
  519.     PrepareRender(file);
  520.     rendermode = 0;
  521.     OptEnable();
  522.     start = DoRender(TRUE);
  523. }
  524.  
  525. MyDialog::Test2()
  526. {
  527.     var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("daylight"); file->AddLast("daylight.c4d");
  528.  
  529.     if (GetCPUCount()>1)
  530.     {
  531.         println("Multiple CPU Render Test");
  532.         rendermode = 100;
  533.         Init();
  534.         PrepareRender(file);
  535.         rendermode = 1;
  536.         OptEnable();
  537.         start = DoRender(FALSE);
  538.     }
  539.     else
  540.         rendermode = -1;
  541. }
  542.  
  543. MyDialog::Test_C4D_Shading()
  544. {
  545.     rendermode = 10;
  546.     Init();
  547.  
  548.     println("CINEMA 4D Shading Test");
  549.  
  550.     SetOpenGL(0);
  551.     c4d_shad_cb = DoShade("CINEMA 4D Shading Test");
  552.  
  553.     rendermode = -1;
  554.     Init();
  555.     println(" ");
  556. }
  557.  
  558. MyDialog::Test_OGL_SW()
  559. {
  560.     rendermode = 10;
  561.     Init();
  562.  
  563.     println("OpenGL Software Lighting Test");
  564.     SetOpenGL(1);
  565.     ogl_soft_cb = DoShade("OpenGL Software Lighting Test");
  566.  
  567.     rendermode = -1;
  568.     Init();
  569.     println(" ");
  570. }
  571.  
  572. MyDialog::Test_OGL_HW()
  573. {
  574.     rendermode = 10;
  575.     Init();
  576.  
  577.     println("OpenGL Hardware Lighting Test");
  578.     SetOpenGL(2);
  579.     ogl_hard_cb = DoShade("OpenGL Hardware Lighting Test");
  580.  
  581.     rendermode = -1;
  582.     Init();
  583.     println(" ");
  584. }
  585.  
  586. MyDialog::StartAllTests()
  587. {
  588.     BringToFront(R_PANELVIEW);
  589.     Test_OGL_HW();
  590.     Test_OGL_SW();
  591.     Test_C4D_Shading();
  592.     multi=GetCPUCount()>1;
  593.     Test1();
  594. }
  595.  
  596. MyDialog::Command(id,msg)
  597. {
  598.     switch (id)
  599.     {
  600.         case B_ABOUT0:
  601.         {
  602.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about0.pdf");
  603.             GeExecuteFile(file);
  604.         }
  605.         break;
  606.  
  607.         case B_ABOUT1:
  608.         {
  609.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about1.pdf");
  610.             GeExecuteFile(file);
  611.         }
  612.         break;
  613.  
  614.         case B_ABOUT2:
  615.         {
  616.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about2.pdf");
  617.             GeExecuteFile(file);
  618.         }
  619.         break;
  620.  
  621.         case B_ABOUT3:
  622.         {
  623.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about3.pdf");
  624.             GeExecuteFile(file);
  625.         }
  626.         break;
  627.  
  628.         case B_ABOUT4:
  629.         {
  630.             var file = GeGetStartupPath(); file->AddLast("bench"); file->AddLast("about4.pdf");
  631.             GeExecuteFile(file);
  632.         }
  633.         break;
  634.  
  635.  
  636.         case B_RENDER:           Test1(); break;
  637.         case B_RENDER_M:         Test2(); break;
  638.         case B_CINEMA:           BringToFront(R_PANELVIEW); Test_C4D_Shading(); BringToFront(PLUGIN_ID); break;
  639.         case B_OPENGL_SW:   BringToFront(R_PANELVIEW); Test_OGL_SW(); BringToFront(PLUGIN_ID); break;
  640.         case B_OPENGL_HW:   BringToFront(R_PANELVIEW); Test_OGL_HW(); BringToFront(PLUGIN_ID); break;
  641.  
  642.         case B_COMPLETE:
  643.             StartAllTests();
  644.             break;
  645.  
  646.         case B_CLIP1:
  647.         case B_CLIP2:
  648.         {
  649.             var t;
  650.             var le;
  651.  
  652.             le = GeGetLineEnd();
  653.  
  654.             t =  "CINEBENCH 2003 v1"+le;
  655.             t += "****************************************************"+le+le;
  656.             t += "Tester           : " + GetString(B_INFO_NAME)+le+le;
  657.             t += "Processor        : " + GetString(B_INFO_MACH)+le;
  658.             t += "MHz              : " + GetString(B_INFO_MHZ)+le;
  659.             t += "Number of CPUs   : " + tostring(GetCPUCount()) +le;
  660.             t += "Operating System : " + GetString(B_INFO_OS)+le;
  661.             t += le;
  662.             t += "Graphics Card    : " + GetString(B_INFO_GFX)+le;
  663.             t += "Resolution       : <fill this out>"+le;
  664.             t += "Color Depth      : <fill this out>"+le+le;
  665.             t += "****************************************************"+le+le;
  666.             t += "Rendering (Single   CPU): "; if (render_1_cb !=0.0) t += tostring( render_1_cb,".0f"); else t += "---"; t += " CB-CPU "+le;
  667.             t += "Rendering (Multiple CPU): "; if (render_x_cb!=0.0) t += tostring(render_x_cb,".0f"); else t += "---"; t += " CB-CPU "+le;
  668.             t += le;
  669.             if (render_1_cb!=0.0 && render_x_cb!=0.0)
  670.                 t += "Multiprocessor Speedup: "+tostring(render_x_cb/render_1_cb,".2f")+le;
  671.             t += le;
  672.  
  673.             t += "Shading (CINEMA 4D)                : "; if (c4d_shad_cb!=0.0) t += tostring(c4d_shad_cb,".0f"); else t += "---"; t += " CB-GFX "+le;
  674.             t += "Shading (OpenGL Software Lighting) : "; if (ogl_soft_cb!=0.0) t += tostring(ogl_soft_cb,".0f"); else t += "---"; t += " CB-GFX "+le;
  675.             t += "Shading (OpenGL Hardware Lighting) : "; if (ogl_hard_cb!=0.0) t += tostring(ogl_hard_cb,".0f"); else t += "---"; t += " CB-GFX "+le;
  676.             t += le;
  677.  
  678.             var a,b,s;
  679.             a = c4d_shad_cb;
  680.             b = ogl_soft_cb; if (ogl_hard_cb>b) b=ogl_hard_cb;
  681.             if (a!=0.0 && b!=0.0)
  682.             {
  683.                 t += "OpenGL Speedup: " + tostring(b/a,".2f")+le;
  684.             }
  685.  
  686.             t += le + "****************************************************"+le;
  687.  
  688.             if (id == B_CLIP2)
  689.             {
  690.                 // send data to CINEBENCH database plugin
  691.                 var b = new(BaseContainer,0);
  692.                 b->SetData(0,t);
  693.                 SendPluginMessage(b,200000020);
  694.             }
  695.             else
  696.             {
  697.                 SetClipboardData(t);
  698.             }
  699.         }
  700.         break;
  701.     }
  702. }
  703.  
  704.  
  705.  
  706.  
  707. var splashbitmap = 0;
  708.  
  709. MyDialog::Timer(msg)
  710. {
  711.     if (!splashbitmap)
  712.     {
  713.         splashbitmap = TRUE;
  714.     }
  715.     if (multi && rendermode==-1)
  716.     {
  717.         multi=FALSE;
  718.         Test2();
  719.     }
  720.     if (AUTORUN && !autostarted)
  721.     {
  722.         if (time()>autoruntime+3000)
  723.         {
  724.             autostarted = TRUE;
  725.             StartAllTests();
  726.         }
  727.         return;
  728.     }
  729. }
  730.  
  731. MyDialog::OptEnable()
  732. {
  733.     Enable(B_RENDER_M,!AUTORUN && GetCPUCount()>1 && rendermode==-1);
  734.     Enable(R_RENDER_M,!AUTORUN && GetCPUCount()>1);
  735.     Enable(R_RM1     ,!AUTORUN && GetCPUCount()>1);
  736.     Enable(R_RM2     ,!AUTORUN && GetCPUCount()>1);
  737.     Enable(R_GAIN_MP ,!AUTORUN && GetCPUCount()>1);
  738.  
  739.     Enable(B_RENDER,!AUTORUN && rendermode==-1);
  740.     Enable(B_CINEMA,!AUTORUN && rendermode==-1);
  741.     Enable(B_OPENGL_SW,!AUTORUN && rendermode==-1);
  742.     Enable(B_OPENGL_HW,!AUTORUN && rendermode==-1);
  743.     Enable(B_CLIP1,!AUTORUN && rendermode==-1);
  744.     Enable(B_CLIP2,!AUTORUN && rendermode==-1);
  745.  
  746.     Enable(B_COMPLETE,!AUTORUN && rendermode==-1);
  747. }
  748.  
  749. var showsplash;
  750.  
  751. MyDialog::Init()
  752. {
  753.     if (!showsplash)
  754.     {
  755.         var file = GeGetStartupPath(); file->AddLast("plugins"); file->AddLast("bench"); file->AddLast("cb.jpg");
  756.         ShowBitmap(file);
  757.         showsplash = TRUE;
  758.     }
  759.  
  760.     OptEnable();
  761.  
  762.     if (render_1_cb!=0.0)
  763.     {
  764.         var txt = stradd(tostring(render_1_cb,".0f")," CB-CPU");
  765.         SetString(R_RENDER,txt);
  766.     }
  767.     else
  768.         SetString(R_RENDER,"---");
  769.  
  770.     if (render_x_cb!=0.0)
  771.     {
  772.         var txt = stradd(tostring(render_x_cb,".0f")," CB-CPU");
  773.         SetString(R_RENDER_M,txt);
  774.     }
  775.     else
  776.         SetString(R_RENDER_M,"---");
  777.  
  778.     if (c4d_shad_cb!=0.0)
  779.     {
  780.         var txt = stradd(tostring(c4d_shad_cb,".0f")," CB-GFX");
  781.         SetString(R_CINEMA,txt);
  782.     }
  783.     else
  784.         SetString(R_CINEMA,"---");
  785.  
  786.     if (ogl_soft_cb!=0.0)
  787.     {
  788.         var txt = stradd(tostring(ogl_soft_cb,".0f")," CB-GFX");
  789.         SetString(R_OPENGL_SOFT,txt);
  790.     }
  791.     else
  792.         SetString(R_OPENGL_SOFT,"---");
  793.  
  794.     if (ogl_hard_cb!=0.0)
  795.     {
  796.         var txt = stradd(tostring(ogl_hard_cb,".0f")," CB-GFX");
  797.         SetString(R_OPENGL_HARD,txt);
  798.     }
  799.     else
  800.         SetString(R_OPENGL_HARD,"---");
  801.  
  802.  
  803.     if (render_x_cb!=0.0 && render_1_cb!=0.0)
  804.     {
  805.         var txt = stradd(tostring(render_x_cb/render_1_cb,".2f")," x");
  806.         SetString(R_GAIN_MP,txt);
  807.     }
  808.     else
  809.         SetString(R_GAIN_MP,"---");
  810.  
  811.     var mmax=ogl_hard_cb;
  812.     if (ogl_soft_cb>ogl_hard_cb) mmax=ogl_soft_cb;
  813.  
  814.     SetString(R_GAIN_OGLHW_OGLSW,(c4d_shad_cb!=0.0 && mmax!=0.0) ? stradd(tostring(mmax/c4d_shad_cb,".2f")," x") : "---");
  815. }
  816.  
  817. // ************************************************************************
  818.  
  819. class MyMenuPlugin : MenuPlugin
  820. {
  821.     public:
  822.         MyMenuPlugin();
  823.  
  824.         GetID();
  825.         GetName();
  826.         GetHelp();
  827.         Execute(doc);
  828.         RestoreLayout(secret);
  829. }
  830.  
  831. MyMenuPlugin::MyMenuPlugin() { super(); }
  832. MyMenuPlugin::GetID()        { return PLUGIN_ID; }
  833. MyMenuPlugin::GetName()      { return "CINEBENCH 2003"; }
  834. MyMenuPlugin::GetHelp()      { return "CINEBENCH 2003"; }
  835.  
  836. MyMenuPlugin::Execute(doc)
  837. {
  838.     if (!dialog) dialog = new(MyDialog);
  839.     dialog->Open(TRUE,-1,-1);
  840. }
  841.  
  842. MyMenuPlugin::RestoreLayout(secret)
  843. {
  844.     if (!dialog) dialog = new(MyDialog);
  845.     dialog->RestoreLayout(secret);
  846. }
  847.  
  848. // ************************************************************************
  849.  
  850. main()
  851. {
  852.     c4d_shad_cb = 0.0;
  853.     ogl_soft_cb = 0.0;
  854.     ogl_hard_cb = 0.0;
  855.     render_1_cb  = 0.0;
  856.     render_x_cb = 0.0;
  857.  
  858.     Register(MyMenuPlugin);
  859. }
  860.